import axios from 'axios'

// 基础URL
const BASE_URL = 'http://74ac341c.r3.cpolar.top';

// 微信小程序环境的适配器
function mpAdapter(config) {
  return new Promise((resolve, reject) => {
    let url = config.baseURL + config.url
    
    // 处理不同请求方法的数据
    let data = null
    if (config.method.toUpperCase() === 'GET') {
      data = config.params
    } else {
      data = config.data && config.data.params ? config.data.params : config.data
    }
    
    console.log('mpAdapter执行，请求URL:', url);
    console.log('mpAdapter执行，请求方法:', config.method);
    
    // 获取请求头
    let header = config.headers || {};
    
    // 关键修复：在mpAdapter中直接获取token并添加到请求头
    const token = uni.getStorageSync('token');
    if (token) {
      header['Authorization'] = `Bearer ${token}`;
    }
    
    console.log('mpAdapter最终请求头:', header);
    
    wx.request({
      url: url,
      method: config.method,
      data: data,
      header: header,
      success: (res) => {
        const response = {
          data: res.data,
          status: res.statusCode,
          headers: res.header,
          config: config
        }
        resolve(response)
      },
      fail: (err) => {
        reject(err)
      }
    })
  })
}

const apiClient = axios.create({
    baseURL: BASE_URL,
    headers: {
        'Content-Type': 'application/json'
    }
})

// 在微信小程序环境中使用自定义适配器
// #ifdef MP-WEIXIN
apiClient.defaults.adapter = mpAdapter
// #endif

// 添加请求拦截器，自动添加token到请求头
apiClient.interceptors.request.use(
  config => {
    console.log('请求拦截器执行, URL:', config.url);
    
    // 从本地存储获取token
    const token = uni.getStorageSync('token');
    console.log('拦截器获取的token:', token);
    
    // 如果token存在，则添加到请求头
    if (token) {
      // 确保headers对象存在
      config.headers = config.headers || {};
      config.headers['Authorization'] = `Bearer ${token}`;
      console.log('已添加token到请求头', config.headers.Authorization);
    } else {
      console.warn('token不存在，请求未添加Authorization头');
    }
    
    console.log('请求的完整headers:', config.headers);
    return config;
  },
  error => {
    console.error('请求拦截器出错:', error);
    return Promise.reject(error);
  }
);

// 添加响应拦截器，用于调试
apiClient.interceptors.response.use(
  response => {
    console.log('响应拦截器: 请求成功', response.config.url);
    return response;
  },
  error => {
    console.error('响应拦截器: 请求失败', error.config?.url);
    console.error('错误信息:', error.message);
    if (error.response) {
      console.error('状态码:', error.response.status);
      console.error('响应数据:', error.response.data);
    }
    return Promise.reject(error);
  }
);

// 直接使用微信API发送请求，跳过axios
export const wxRequest = (options) => {
  const { url, method = 'GET', data, params } = options;
  
  // 构建完整URL
  const fullUrl = (url.startsWith('http') ? url : BASE_URL + url);
  
  // 确定发送的数据
  const sendData = method.toUpperCase() === 'GET' ? params : data;
  
  // 构建请求头
  const header = {
    'Content-Type': 'application/json'
  };
  
  // 获取并添加token
  const token = uni.getStorageSync('token');
  if (token) {
    header['Authorization'] = `Bearer ${token}`;
    console.log('wxRequest添加token到请求头:', header.Authorization);
  } else {
    console.warn('wxRequest未找到token，无法添加到请求头');
  }
  
  console.log('wxRequest请求URL:', fullUrl);
  console.log('wxRequest请求方法:', method);
  console.log('wxRequest请求数据:', sendData);
  console.log('wxRequest请求头:', header);
  
  return new Promise((resolve, reject) => {
    wx.request({
      url: fullUrl,
      method: method,
      data: sendData,
      header: header,
      success: (res) => {
        console.log('wxRequest请求成功:', res);
        resolve(res.data);
      },
      fail: (err) => {
        console.error('wxRequest请求失败:', err);
        reject(err);
      }
    });
  });
};

export default apiClient 